package com.ucar.train.service.zhoujinmu.pattern;

/**
 * @author zhoujinmu
 * @title Handler
 * @projectName desiginpattern
 * @description TODO
 * @created 2019-08-21 16:38
 **/
public abstract class Handler {
    // 能处理的级别
    private int level = 0;
    // 责任传递， 下一个人责任人是谁
    private Handler nextHandler;
    // 每个类都要说明一下自己能处理哪些请求
    public Handler(int level) {
        this.level = level;
    }
    // 你要处理这个请求
    public final void HandleMessage(Car car) throws Exception {
        if (car.getRepairState() == this.level) {
            this.repair(car);
        } else {
            if (this.nextHandler != null) { // 有后续环节，
                this.nextHandler.HandleMessage(car); // 才把请求往后递送this.nextHandler.HandleMessage(women);
            } else { // 已经没有后续处理人了， 不用处理了
                System.out.println("---没地方请示了， 按不同意处理---\n");
            }
        }
    }

    // 如果不属于你处理的请求， 你应该让她找下一个环节的人， 如女儿出嫁了， 还向父亲请示是否可以逛街， 那父亲就应该告诉女儿， 应该找丈夫请示
    public void setNext(Handler nextHandler) {
        this.nextHandler = nextHandler;
    }

    // 有请示那当然要回应
    protected abstract void repair(Car car) throws Exception;
}
